#!/usr/bin/env python3

# Copyright (c) 2005-2014 Fpemud <fpemud@sina.com>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.


from ...._plugin import KernelAddonPlugin


class Plugin(KernelAddonPlugin):

    def modify_kernel_config(self, context):
        context.select_by_symbol("X86_MSR", "y")
        context.select_by_symbol("X86_CPUID", "y")
        context.select_tree_by_symbol("MTRR", "y")
        context.select_by_symbol("X86_PAT", "y")
        context.select_by_symbol("X86_CPU_RESCTRL", "y")

        context.select_by_symbol("PROCESSOR_SELECT", "y")
        context.select_by_symbol("CPU_SUP_INTEL", "y")                                                               # Support Intel processors
        context.select_tree_by_symbol("PROCESSOR_SELECT", "n", value_priority=context.ValuePriority.USER_POLICY)     # FIXME: n should be default option, why is it needed?

        context.select_by_symbol("X86_MCE", "y")
        context.select_by_symbol("X86_MCE_INTEL", "y")

        context.select_by_symbol("MICROCODE", "y")
        context.select_by_symbol("MICROCODE_INTEL", "y")

        context.select_by_symbol("PERF_EVENTS_INTEL_RAPL", "m")
        context.select_by_symbol("PERF_EVENTS_INTEL_UNCORE", "m")
        context.select_by_symbol("PERF_EVENTS_INTEL_CSTATE", "m")

        context.select_by_symbol("X86_INTEL_PSTATE", "y")

        context.select_by_symbol("INTEL_IDLE", "y")

        context.select_tree_by_symbol("INTEL_IOMMU", "m,y")

        # return [
        #     "PROCESSOR_SELECT=y",
        #     "CPU_SUP_INTEL=y",                 # Support Intel processors
        #     "[symbols:PROCESSOR_SELECT]=n",    # FIXME: n should be default option, why is it needed?

        #     "X86_MCE=y",
        #     "X86_MCE_INTEL=y",

        #     "MICROCODE=y",
        #     "MICROCODE_INTEL=y",

        #     "PERF_EVENTS_INTEL_RAPL=m",
        #     "PERF_EVENTS_INTEL_UNCORE=m",
        #     "PERF_EVENTS_INTEL_CSTATE=m",

        #     "X86_INTEL_PSTATE=y",

        #     "INTEL_IDLE=y",

        #     "[symbols:INTEL_IOMMU]=m,y",
        # ]
